package 文件操作.searchNameAndContent;

import java.io.*;
import java.util.*;

public class SearchNameAndContent {
    /*
    扫描输入目录, 找到名称或者内容中包含指定字符的所有普通文件
     */

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("请输入您要扫描的路径 > ");
        String targetPath = in.next();
        File file = new File(targetPath);

        if (! file.isDirectory()) { // 如果不是目录
            System.out.println("输入路径有误");
            return ;
        }

        System.out.println("请输入您要搜索的关键词");
        String content = in.next();

        searchDirectory(file, content);
    }

    private static void searchDirectory(File file, String content) {
        System.out.println("当前搜索路径 | " + file.getAbsoluteFile());
        File[] files = file.listFiles(); // 展示所有文件
        if (files == null) {
            return ;
        }
        for (File f : files) {
            if (f.isFile()) { // 如果是普通文件
                tryDelete(f, content);
            } else {  // 如果还是目录
                searchDirectory(f, content);
            }
        }
    }

    private static void tryDelete(File file, String content) {
        if (file.getName().contains(content)) {
            // 如果名字包含关键字
            System.out.println("===当前文件路径 : " + file.getAbsoluteFile() + "   名字 : " + file.getName() + "===");
        }
        // 再检查内容有没有
        try (InputStream inputStream = new FileInputStream(file)) {
            Scanner reader = new Scanner(inputStream);

            StringBuilder builder = new StringBuilder();
            while (reader.hasNextLine()) {
                builder.append(reader.nextLine());
            }

            if (builder.indexOf(content) >= 0) {
                System.out.println("当前文件路径 : " + file.getAbsoluteFile() + "   名字 : " + file.getName());
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}
